/**
 * Copyright (c) 2014-2015, RongCloud.
 * All rights reserved.
 *
 * All the contents are the copyright of RongCloud Network Technology Co.Ltd.
 * Unless otherwise credited. http://rongcloud.cn
 *
 */

//  RCGroupNotificationMessage.h
//  Created by xugang on 14/11/24.

#import <RongIMLibCore/RCMessageContent.h>

/// 群组通知消息的类型名
#define RCGroupNotificationMessageIdentifier @"RC:GrpNtf"
/// 有成员加入群组的通知
#define GroupNotificationMessage_GroupOperationAdd @"Add"
/// 有成员退出群组的通知
#define GroupNotificationMessage_GroupOperationQuit @"Quit"
/// 有成员被踢出群组的通知
#define GroupNotificationMessage_GroupOperationKicked @"Kicked"
/// 群组名称发生变更的通知
#define GroupNotificationMessage_GroupOperationRename @"Rename"
/// 群组公告发生变更的通知
#define GroupNotificationMessage_GroupOperationBulletin @"Bulletin"

/// 群组通知消息类
///
/// 群组通知消息类，此消息会进行存储，但不计入未读消息数。
/// 
/// - Remark: 通知类消息
@interface RCGroupNotificationMessage : RCMessageContent <NSCoding>

/// 群组通知的当前操作名
///
/// 群组通知的当前操作名称，您可以使用预定义好的操作名，也可以是您自己定义的任何操作名。
/// 预定义的操作名：
/// GroupNotificationMessage_GroupOperationAdd、GroupNotificationMessage_GroupOperationQuit、
/// GroupNotificationMessage_GroupOperationKicked、GroupNotificationMessage_GroupOperationRename、
/// GroupNotificationMessage_GroupOperationBulletin。
@property (nonatomic, copy) NSString *operation;

/// 当前操作发起用户的用户 ID
@property (nonatomic, copy) NSString *operatorUserId;

/// 当前操作的目标对象
///
/// 
/// 当前操作的目标对象，如被当前操作目标用户的用户 ID 或变更后的群主名称等。
@property (nonatomic, copy) NSString *data;

/// 当前操作的消息内容
@property (nonatomic, copy) NSString *message;

/// 初始化群组通知消息
///
/// - Parameter operation: 群组通知的当前操作名
/// - Parameter operatorUserId: 当前操作发起用户的用户 ID
/// - Parameter data: 当前操作的目标对象
/// - Parameter message: 当前操作的消息内容
/// - Parameter extra: 当前操作的附加信息
///
/// - Returns: 群组通知消息对象
///
/// 群组关系由开发者维护，所有的群组操作都由您的服务器自己管理和维护。
/// 所以群组通知的操作名和目标对象、消息内容、扩展信息您均可以自己定制，只要您发送方和接收方针对具体字段内容做好UI显示即可。
+ (instancetype)notificationWithOperation:(NSString *)operation
                           operatorUserId:(NSString *)operatorUserId
                                     data:(NSString *)data
                                  message:(NSString *)message
                                    extra:(NSString *)extra;

@end
